#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;

#define E        0
#define W        1
#define B        2
#define O        3
#define X        4
#define NE       5
#define NW       6
#define NB       7

int* p[30];
int p1[]={B,W,B,E,NE,E,X,X,X};
int p2[]={B,W,E,E,NE,E,X,E,X};
int p3[]={B,W,X,B,NE,E,X,E,X};
int p4[]={B,W,W,E,B,E,X,E,X};
int p5[]={B,W,X,W,NE,X,X,X,X};
int p6[]={B,W,X,W,NE,W,X,E,X};
int p7[]={B,W,X,W,NE,E,X,W,X};
int p8[]={X,B,X,W,NE,W,NW,NW,NW};
int p9[]={B,E,X,W,NE,X,O,O,O};
int p10[]={X,B,X,NB,NE,W,O,O,O};
int p11[]={X,B,W,X,B,X,O,O,O};
int p12[]={X,B,W,X,W,NB,O,O,O};
int p13[]={X,B,W,W,W,B,O,O,O};

int p14[]={W,B,W,E,NE,E,X,X,X};
int p15[]={W,B,E,E,NE,E,X,E,X};
int p16[]={W,B,X,W,NE,E,X,E,X};
int p17[]={W,B,B,E,W,E,X,E,X};
int p18[]={W,B,X,B,NE,X,X,X,X};
int p19[]={W,B,X,B,NE,B,X,E,X};
int p20[]={W,B,X,B,NE,E,X,B,X};
int p21[]={X,W,X,B,NE,B,NB,NB,NB};
int p22[]={W,E,X,B,NE,X,O,O,O};
int p23[]={X,W,X,NW,NE,B,O,O,O};
int p24[]={X,W,B,X,W,X,O,O,O};
int p25[]={X,W,B,X,B,NW,O,O,O};
int p26[]={X,W,B,B,B,W,O,O,O};

vector<int> result;

void se(int i,int step,int ans,int muti){
	if (step==9) {
		result.push_back(ans);
		if (ans==4) cout<<i<<' '<<muti<<endl;
		return;
	}
	if (p[i][step]<4) {
		se(i, step+1, ans+muti*p[i][step], muti*4);
		return ;
	}
	
	if (p[i][step]!=NE) se(i, step+1, ans+muti*0, muti*4);
	if (p[i][step]!=NW) se(i, step+1, ans+muti*1, muti*4);
	if (p[i][step]!=NB) se(i, step+1, ans+muti*2, muti*4);

		
}

void re(int x){
	cout<<"re"<<endl;
	int n[9];
	for (int i=0;i<3;i++)
		for (int j=0;j<3;j++){
			n[i*3+j] = p[x][j*3+2-i];
		}
	for (int i=0;i<9;i++) p[x][i] = n[i];
}

void doit(int i){
	se(i,0,0,1);
}


int main(){
	ofstream fout;
	fout.open("genout.txt");
	result.clear();
	p[1]=p1;
	p[2]=p2;
	p[3]=p3;
	p[4]=p4;
	p[5]=p5;
	p[6]=p6;
	p[7]=p7;
	p[8]=p8;
	p[9]=p9;
	p[10]=p10;
	p[11]=p11;
	p[12]=p12;
	p[13]=p13;
	p[14]=p14;
	p[15]=p15;
	p[16]=p16;
	p[17]=p17;
	p[18]=p18;
	p[19]=p19;
	p[20]=p20;
	p[21]=p21;
	p[22]=p22;
	p[23]=p23;
	p[24]=p24;
	p[25]=p25;
	p[26]=p26;

	for (int i=6;i<8;i++) {
		for (int x=0;x<9;x++) cout<<p[i][x]<<' ';
		cout<<endl;
		doit(i);
		re(i);
		for (int x=0;x<9;x++) cout<<p[i][x]<<' ';
		cout<<endl;
		doit(i);
		re(i);
		doit(i);
		re(i);
		doit(i);
	}
	for (int i=19;i<21;i++) {
		for (int x=0;x<9;x++) cout<<p[i][x]<<' ';
		cout<<endl;
		doit(i);
		re(i);
		for (int x=0;x<9;x++) cout<<p[i][x]<<' ';
		cout<<endl;
		doit(i);
		re(i);
		doit(i);
		re(i);
		doit(i);
	}

	sort(result.begin(),result.end());
	cout<<result.size()<<endl;
	for (int i=0;i<result.size();i++){
		fout<<result[i]<<',';
		if (i%100==0) fout<<endl;
	}
	fout.close();
return 0;
}
